home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / hamrad3.arc / NETWORK.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  9.7 KB  |  315 lines

  1. 100  CLS :REM "NETWORK 1"
  2. 110  PRINT TAB(33);"****NETWORK****"
  3. 120  PRINT :PRINT "NOTE: ELEMENT VALUES MUST BE IN REACTANCE (OHMS)."
  4. 130  PRINT :BEEP :PRINT "HARD COPY REQUIRED?  (Y/N)"
  5. 140  P$=INKEY$ :IF P$="" THEN 140 ELSE PRINT TAB(24);P$
  6. 150  IF P$<>"Y" AND P$<>"N" THEN 140
  7. 160  BEEP :PRINT "CONVERSION REQUIRED? (Y/N)"
  8. 170  A$=INKEY$ :IF A$="" THEN 170 ELSE PRINT TAB(24);A$ :IF A$="Y" THEN 2570
  9. 180  IF A$<>"N" THEN 170
  10. 190  PRINT :PRINT "THIS PROGRAM CALCULATES AND PLOTS CIRCUIT BANDWIDTH IN DB VS FREQUENCY."
  11. 200  FOR N=1 TO 4 :PRINT :NEXT N
  12. 210  PRINT "          ********     ********     ********     ********"
  13. 220  PRINT "          *      *     *      *     *      *     *      *"
  14. 230  PRINT "   ********  X1  *******  X3  *******  X5  *******  X7  *********>>"
  15. 240  PRINT "   *      *      *  *  *      *  *  *      *  *  *      *      *"
  16. 250  PRINT "   *      ********  *  ********  *  ********  *  ********      *"
  17. 260  PRINT "   *                *            *            *                *"
  18. 270  PRINT "*******          *******      *******      *******          *******"
  19. 280  PRINT "*     *          *     *      *     *      *     *          *     *"
  20. 290  PRINT "* Rin *          *  X2 *      *  X4 *      *  X6 *          * Rout*"
  21. 300  PRINT "*     *          *     *      *     *      *     *          *     *"
  22. 310  PRINT "*******          *******      *******      *******          *******"
  23. 320  PRINT :PRINT "ENTER CIRCUIT REACTANCES thus:"
  24. 330  PRINT :PRINT "A. USE POSITIVE NUMBERS for INDUCTORS"
  25. 340  PRINT        "B. USE NEGATIVE NUMBERS for CAPACITORS"
  26. 350  PRINT        "C. USE 0'S for MISSING (UNUSED) ELEMENTS" :DIM X(24),A(24)
  27. 360  PRINT :BEEP :INPUT "ENTER Rin    ";RI
  28. 370  BEEP :INPUT "ENTER X1     ";X(1)
  29. 380  BEEP :INPUT "ENTER X2     ";X(2)
  30. 390  BEEP :INPUT "ENTER X3     ";X(3)
  31. 400  BEEP :INPUT "ENTER X4     ";X(4)
  32. 410  BEEP :INPUT "ENTER X5     ";X(5)
  33. 420  BEEP :INPUT "ENTER X6     ";X(6)
  34. 430  GOSUB 690
  35. 440  IF E$="E" THEN 670
  36. 450  BEEP :INPUT "ENTER X7     ";X(7)
  37. 460  BEEP :INPUT "ENTER X8     ";X(8)
  38. 470  BEEP :INPUT "ENTER X9     ";X(9)
  39. 480  BEEP :INPUT "ENTER X10    ";X(10)
  40. 490  BEEP :INPUT "ENTER X11    ";X(11)
  41. 500  BEEP :INPUT "ENTER X12    ";X(12)
  42. 510  GOSUB 690
  43. 520  IF E$="E" THEN 670
  44. 530  BEEP :INPUT "ENTER X13    ";X(13)
  45. 540  BEEP :INPUT "ENTER X14    ";X(14)
  46. 550  BEEP :INPUT "ENTER X15    ";X(15)
  47. 560  BEEP :INPUT "ENTER X16    ";X(16)
  48. 570  BEEP :INPUT "ENTER X17    ";X(17)
  49. 580  BEEP :INPUT "ENTER X18    ";X(18)
  50. 590  GOSUB 690
  51. 600  IF E$="E" THEN 670
  52. 610  BEEP :INPUT "ENTER X19    ";X(19)
  53. 620  BEEP :INPUT "ENTER X20    ";X(20)
  54. 630  BEEP :INPUT "ENTER X21    ";X(21)
  55. 640  BEEP :INPUT "ENTER X22    ";X(22)
  56. 650  BEEP :INPUT "ENTER X23    ";X(23)
  57. 660  BEEP :INPUT "ENTER X24    ";X(24)
  58. 670  BEEP :INPUT "ENTER Rout   ";RO
  59. 680  BEEP :INPUT "ENTER FREQ (MHZ)";FO :GOTO 720
  60. 690  PRINT TAB(10);"PRESS E TO EXIT"
  61. 700  E$=INKEY$ :IF E$="" THEN 700
  62. 710  RETURN
  63. 720  IF P$<>"Y" THEN 760
  64. 730  LPRINT "NOTE:#1 ODD REACTANCES ARE IN SERIES,EVEN REACTANCES ARE IN SHUNT."
  65. 740  LPRINT "NOTE:#2 POSITIVE NUMBERS IDENTIFY INDUCTORS,NEGATIVE NUMBERS";
  66. 750  LPRINT "CAPACITORS." :LPRINT
  67. 760  FL=0 :CLS :REM SUBROUTINE TO PERMIT VALUE CHANGES
  68. 770  PRINT "TERM";TAB(8);"VALUE"TAB(40);"TERM";TAB(48);"VALUE"
  69. 780  PRINT "----";TAB(8);"-----";TAB(40);"----";TAB(48)"-----"
  70. 790  PRINT "1   X1 =";X(1);TAB(40);"2   X2 =";X(2) :PRINT"3   X3 =";X(3);TAB(40);"4   X4 =";X(4) :PRINT "5   X5 =";X(5);TAB(40);"6   X6 =";X(6) :PRINT "7   X7 =";X(7);TAB(40);"8   X8 =";X(8) :PRINT "9   X9 =";X(9);TAB(40);"10  X10=";X(10)
  71. 800  PRINT "11  X11=";X(11);TAB(40);"12  X12=";X(12) :PRINT "13  X13=";X(13);TAB(40);"14  X14=";X(14) :PRINT "15  X15=";X(15);TAB(40);"16  X16=";X(16) :PRINT "17  X17=";X(17);TAB(40);"18  X18=";X(18) :PRINT "19  X19=";X(19);TAB(40);
  72. 810  PRINT "20  X20=";X(20) :PRINT "21  X21=";X(21);TAB(40);"22  X22=";X(22) :PRINT "23  X23=";X(23);TAB(40);"24  X24=";X(24) :PRINT "25  Rin=";RI"ohms";TAB(40);"26 Rout=";RO;"ohms" :PRINT "27 FREQ.=";FO;"Mhz"
  73. 820  PRINT :BEEP :PRINT "ANY CHANGES (Y/N)"
  74. 830  B$=INKEY$ :IF B$="" THEN 830
  75. 840  IF B$="N" THEN 1160
  76. 850  IF B$<>"Y" THEN 830
  77. 860  PRINT :BEEP :INPUT "ENTER TERM#,NEW VALUE ";G,H
  78. 870  ON G GOTO 880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070,1080,1090,1100,1110,1120,1130,1140
  79. 880  X(1)=H :GOTO 760
  80. 890  X(2)=H :GOTO 760
  81. 900  X(3)=H :GOTO 760
  82. 910  X(4)=H :GOTO 760
  83. 920  X(5)=H :GOTO 760
  84. 930  X(6)=H :GOTO 760
  85. 940  X(7)=H :GOTO 760
  86. 950  X(8)=H :GOTO 760
  87. 960  X(9)=H :GOTO 760
  88. 970  X(10)=H :GOTO 760
  89. 980  X(11)=H :GOTO 760
  90. 990  X(12)=H :GOTO 760
  91. 1000  X(13)=H :GOTO 760
  92. 1010  X(14)=H :GOTO 760
  93. 1020  X(15)=H :GOTO 760
  94. 1030  X(16)=H :GOTO 760
  95. 1040  X(17)=H :GOTO 760
  96. 1050  X(18)=H :GOTO 760
  97. 1060  X(19)=H :GOTO 760
  98. 1070  X(20)=H :GOTO 760
  99. 1080  X(21)=H :GOTO 760
  100. 1090  X(22)=H :GOTO 760
  101. 1100  X(23)=H :GOTO 760
  102. 1110  X(24)=H :GOTO 760
  103. 1120  RI=H :GOTO 760
  104. 1130  RO=H :GOTO 760
  105. 1140  FO=H :GOTO 760
  106. 1150  FO=H :GOTO 760
  107. 1160  FL=O :IF P$<>"Y" THEN 1240
  108. 1170  LPRINT "X1=";X(1);" X2=";X(2);" X3=";X(3);" X4=";X(4);" X5=";X(5)
  109. 1180  LPRINT "X6=";X(6);" X7=";X(7);" X8=";X(8);" X9=";X(9);" X10=";X(10)
  110. 1190  LPRINT "X11=";X(11);" X12=";X(12);" X13=";X(13);" X14=";X(14);
  111. 1200  LPRINT " X15=";X(15) :LPRINT "X16=";X(16);"X17=";X(17);" X18=";X(18);
  112. 1210  LPRINT " X19=";X(19);" X20=";X(20) :LPRINT "X21=";X(21);
  113. 1220  LPRINT " X22=";X(22);" X23=";X(23);" X24=";X(24)
  114. 1230  LPRINT "Rin=";RI;"ohms";"; Rout=";RO;"ohms";"; FREQ.=";FO;"Mhz"
  115. 1240  CLS :PRINT "SELECT :" :PRINT :PRINT TAB(10);"SCALE";TAB(40);"BANDWIDTH"
  116. 1250  PRINT TAB(10);"-----";TAB(40);"---------"
  117. 1260  PRINT "1. DB vs FREQUENCY TABLE";TAB(40);"1. 100%" :PRINT "2. 0 to 6.0";
  118. 1270  PRINT " DB PLOT on SCREEN";TAB(40);"2. 50%" :PRINT "3. 0 to 60  DB";
  119. 1280  PRINT " PLOT on SCREEN";TAB(40);"3. 25%" :PRINT "4. 0 to 6.0 DB";
  120. 1290  PRINT " PRINTER PLOT";TAB(40);"4. 10%" :PRINT "5. 0 to 60  DB";
  121. 1300  PRINT " PRINTER PLOT";TAB(40);"5.  5%" :PRINT TAB(40);"6.  1%"
  122. 1310  PRINT :BEEP :INPUT "(SCALE ,BW)";G,H :IF G>5 THEN 1240
  123. 1320  IF H=1 THEN G1=5 :G2=15 :G3=0.2 :GOTO 1380
  124. 1330  IF H=2 THEN G1=7.5 :G2=12.5 :G3=0.1 :GOTO 1380
  125. 1340  IF H=3 THEN G1=8.75 :G2=11.25 :G3=0.05 :GOTO 1380
  126. 1350  IF H=4 THEN G1=9.5 :G2=10.5 :G3=0.02 :GOTO 1380
  127. 1360  IF H=5 THEN G1=9.75 :G2=10.25 :G3=0.01 :GOTO 1380
  128. 1370  IF H<>6 THEN 1240 ELSE G1=9+9/10 :G2=10.1 :G3=0.005
  129. 1380  IF G=2 OR G=3 THEN G3=G3*2.5
  130. 1390  FOR N=G1 TO G2 STEP G3
  131. 1400  J=0 :JX=0 :RX=RO
  132. 1410  I=N/10 :FX=FO*I :REM COMBINE SERIES & PARALLEL
  133. 1420  FOR Z=1 TO 23 :IF X(Z)>0 THEN 1440
  134. 1430  A(Z)=X(Z)/I :GOTO 1450
  135. 1440  A(Z)=X(Z)*I
  136. 1450  NEXT Z
  137. 1460  J=0 :JX=0 :RX=RO
  138. 1470  J=A(24) :GOSUB 1910
  139. 1480  J=A(23)+JX :GOSUB 1860
  140. 1490  J=A(22) :GOSUB 1910
  141. 1500  J=A(21)+JX :GOSUB 1860
  142. 1510  J=A(20) :GOSUB 1910
  143. 1520  J=A(19)+JX :GOSUB 1860
  144. 1530  J=A(18) :GOSUB 1910
  145. 1540  J=A(17)+JX :GOSUB 1860
  146. 1550  J=A(16) :GOSUB 1910
  147. 1560  J=A(15)+JX :GOSUB 1860
  148. 1570  J=A(14) :GOSUB 1910
  149. 1580  J=A(13)+JX :GOSUB 1860
  150. 1590  J=A(12) :GOSUB 1910
  151. 1600  J=A(11)+JX :GOSUB 1860
  152. 1610  J=A(10) :GOSUB 1910
  153. 1620  J=A(9)+JX :GOSUB 1860
  154. 1630  J=A(8) :GOSUB 1910
  155. 1640  J=A(7)+JX :GOSUB 1860
  156. 1650  J=A(6) :GOSUB 1910
  157. 1660  J=A(5)+JX :GOSUB 1860
  158. 1670  J=A(4) :GOSUB 1910
  159. 1680  J=A(3)+JX :GOSUB 1860
  160. 1690  J=A(2) :GOSUB 1910
  161. 1700  J=A(1)+JX
  162. 1710  R=SQR((RX+RI)^2+J^2)
  163. 1720  PX=RX/R^2 :PR=PX*RI*4
  164. 1730  DB=10*(LOG(PR)/LOG(10))
  165. 1740  IF G=1 THEN 2400 :REM ATTEN.TABLE(SCREEN/PRINTER)
  166. 1750  IF G=2 THEN 2000 :REM 0-6 DB SCREEN PLOT
  167. 1760  IF G=3 THEN 2200 :REM 0-60 DB SCREEN PLOT
  168. 1770  IF G=4 THEN 2720 :REM 6 DB PRINTER PLOT
  169. 1780  IF G<>5 THEN 1240 ELSE 2980 :REM 60 DB PRINTER PLOT
  170. 1790  NEXT N :CLOSE #1
  171. 1800  PRINT :PRINT "PRESS D FOR NEW DATA or NEW SCALE"
  172. 1810  D$=INKEY$ :IF D$="" THEN 1810
  173. 1820  IF D$="D" THEN 760
  174. 1830  PRINT :PRINT "CONTINUE? (Y/N)"
  175. 1840  C$=INKEY$ :IF C$="" THEN 1840
  176. 1850  IF C$="Y" THEN 100 ELSE END
  177. 1860  IF J=0 THEN 1900 :REM PARALLEL
  178. 1870  RS=RX
  179. 1880  RX=RS*(1+(J/RS)^2)
  180. 1890  JX=(RS^2+J^2)/J
  181. 1900  RETURN
  182. 1910  IF J+JX=0 THEN 1990 :REM COMBINE
  183. 1920  IF JX=0 THEN 1960
  184. 1930  IF J=0 THEN 1970
  185. 1940  JX=1/(1/JX+1/J)
  186. 1950  GOTO 1970
  187. 1960  JX=J
  188. 1970  RS=RX/(1+(RX/JX)^2) :REM SERIES
  189. 1980  JX=RS*RX/JX :RX=RS
  190. 1990  RETURN
  191. 2000  IF FL=1 THEN 2040
  192. 2010  CLS
  193. 2020  PRINT " -DB>>   6         5         4         3         2         1         0"
  194. 2030  PRINT "FREQ(Mhz)+----+----+----+----+----+----+----+----+----+----+----+----+"
  195. 2040  FL=1
  196. 2050  Q=DB :Q=(Q+6)*10+10 :Q=INT(Q)
  197. 2060  FX=CINT(FX*10)/10 :PRINT TAB(1);FX;
  198. 2070  IF Q<10 THEN 2100
  199. 2080  IF Q=10 THEN 2110
  200. 2090  IF Q>10 THEN 2120
  201. 2100  PRINT TAB(9);CHR$(60); :KT=1 :GOTO 2120
  202. 2110  PRINT TAB(10);CHR$(42); :KT=1 :GOTO 2130
  203. 2120  PRINT TAB(10);CHR$(124);
  204. 2130  FOR U=20 TO 70 STEP 10
  205. 2140  IF Q>U THEN 2170
  206. 2150  IF KT=1 THEN 2170
  207. 2160  PRINT TAB(Q);CHR$(42); :KT=1
  208. 2170  IF U<>Q THEN PRINT TAB(U);CHR$(43);
  209. 2180  NEXT U
  210. 2190  KT=0 :GOTO 1790
  211. 2200  IF FL=1 THEN 2240
  212. 2210  CLS
  213. 2220  PRINT " -DB>>   60   55   50   45   40   35   30   25   20   15   10   5    0"
  214. 2230  PRINT "FREQ(Mhz)+----+----+----+----+----+----+----+----+----+----+----+----+"
  215. 2240  FL=1
  216. 2250  Q=DB :Q=(Q+60)+10 :Q=INT(Q)
  217. 2260  FX=CINT(FX*10)/10 :PRINT TAB(1);FX;
  218. 2270  IF Q<10 THEN 2300
  219. 2280  IF Q=10 THEN 2310
  220. 2290  IF Q>10 THEN 2320
  221. 2300  PRINT TAB(9);CHR$(60); :KT=1 :GOTO 2320
  222. 2310  PRINT TAB(10);CHR$(42); :KT=1 :GOTO 2330
  223. 2320  PRINT TAB(10);CHR$(124);
  224. 2330  FOR U=20 TO 70 STEP 10
  225. 2340  IF Q>U THEN 2370
  226. 2350  IF KT=1 THEN 2370
  227. 2360  PRINT TAB(Q);CHR$(42); :KT=1
  228. 2370  IF U<>Q THEN PRINT TAB(U);CHR$(43);
  229. 2380  NEXT U
  230. 2390  KT=0 :GOTO 1790
  231. 2400  IF FL=1 THEN 2470 :REM ATTEN TABLE SCREEN/PRINTER
  232. 2410  CLS :IF P$<>"Y" THEN 2450
  233. 2420  LPRINT :LPRINT TAB(6);"FREQ.(Mhz)";TAB(18);"ATTEN.(DB) TITLE:____________";
  234. 2430  LPRINT "___________________"
  235. 2440  GOTO 2470
  236. 2450  PRINT TAB(6);"FREQ.";TAB(18);"ATTEN.(DB)"
  237. 2460  PRINT "     -----       ----------"
  238. 2470  FL=1
  239. 2480  Q=INT(DB*100)/100  :FX=CINT(FX*10)/10
  240. 2490  IF P$<>"Y" THEN 2530
  241. 2500  IF CINT(FO*10)/10=FX THEN 2510 ELSE 2520
  242. 2510  LPRINT TAB(5);FX;TAB(13);"<FO>";TAB(18);Q :GOTO 1790
  243. 2520  LPRINT TAB(5);FX;TAB(18);Q :GOTO 1790
  244. 2530  IF FX=FO THEN 2540 ELSE 2550
  245. 2540  PRINT TAB(5);FX;TAB(13);"<FO>";TAB(18);Q :GOTO 1790
  246. 2550  PRINT TAB(5);FX;TAB(18);Q
  247. 2560  GOTO 1790
  248. 2570  CLS :PI=4*ATN(1) :REM XL & XC COMPUTATIONS
  249. 2580  BEEP :INPUT "ENTER FREQENCY (Mhz)  ";FO
  250. 2590  PRINT :BEEP :INPUT "ELEMENT TYPE L or C   ";X$
  251. 2600  IF X$="L" THEN 2620
  252. 2610  IF X$="C" THEN 2670 ELSE 190
  253. 2620  PRINT :BEEP :INPUT "ENTER INDUCTANCE (nh) ";C :REM INDUCTIVE REACTANCE
  254. 2630  PRINT
  255. 2640  XL=2*PI*FO*10^6*C*10^-9 :XL=INT(XL*100)/100
  256. 2650  PRINT "                   XL= ";XL;"ohms"
  257. 2660  XL=0 :GOTO 2590
  258. 2670  PRINT :BEEP :INPUT "ENTER CAPACITANCE (pf)";B :REM CAPACITIVE REACTANCE
  259. 2680  PRINT
  260. 2690  XC=-1/(2*PI*FO*10^6*B*10^-12) :XC=INT(XC*100)/100
  261. 2700  PRINT "                   XC= ";XC;"ohms"
  262. 2710  XC=0 :GOTO 2590
  263. 2720  IF FL=1 THEN 2820 :REM 6DB PRINTER PLOT
  264. 2730  CLS :LPRINT "TITLE:_________________________________________ DATE:_______";
  265. 2740  LPRINT "_________" :LPRINT
  266. 2750  LPRINT "FREQ(Mhz)";TAB(30);"<< ATTENUATION DB >>"
  267. 2760  LPRINT CHR$(165); :FOR U=10 TO 70 STEP 10
  268. 2770  M=U/10
  269. 2780  LPRINT TAB(U-1);7-M; :NEXT U :LPRINT
  270. 2790  FOR U=10 TO 70
  271. 2800  LPRINT TAB(U);CHR$(243);
  272. 2810  NEXT U
  273. 2820  FL=1
  274. 2830  Q=DB :Q=(Q+6)*10+10 :Q=INT(Q)
  275. 2840  FX=CINT(FX*10)/10 :LPRINT TAB(1);FX;
  276. 2850  IF Q<10 THEN 2880
  277. 2860  IF Q=10 THEN 2890
  278. 2870  IF Q>10 THEN 2900
  279. 2880  LPRINT TAB(9);CHR$(60); :KT=1 :GOTO 2900
  280. 2890  LPRINT TAB(10);CHR$(42); :KT=1 :GOTO 2910
  281. 2900  LPRINT TAB(10);CHR$(124);
  282. 2910  FOR U=20 TO 70 STEP 10
  283. 2920  IF Q>U THEN 2950
  284. 2930  IF KT=1 THEN 2950
  285. 2940  LPRINT TAB(Q);CHR$(42); :KT=1
  286. 2950  IF U<>Q THEN LPRINT TAB(U);CHR$(43);
  287. 2960  NEXT U
  288. 2970  KT=0 :GOTO 1790
  289. 2980  IF FL=1 THEN 3080 :REM 60 DB PRINTER PLOT
  290. 2990  CLS :LPRINT "TITLE:_________________________________________ DATE:_______";
  291. 3000  LPRINT "_________" :LPRINT
  292. 3010  LPRINT "FREQ(Mhz)";TAB(30);"<< ATTENUATION DB >>"
  293. 3020  LPRINT CHR$(165); :FOR U=10 TO 70 STEP 10
  294. 3030  M=U
  295. 3040  LPRINT TAB(U-1);70-M; :NEXT U :LPRINT
  296. 3050  FOR U=10 TO 70
  297. 3060  LPRINT TAB(U);CHR$(243);
  298. 3070  NEXT U
  299. 3080  FL=1
  300. 3090  Q=DB :Q=(Q+60)+10 :Q=INT(Q)
  301. 3100  FX=CINT(FX*10)/10 :LPRINT TAB(1);FX;
  302. 3110  IF Q<10 THEN 3140
  303. 3120  IF Q=10 THEN 3150
  304. 3130  IF Q>10 THEN 3160
  305. 3140  LPRINT TAB(9);CHR$(60); :KT=1 :GOTO 3160
  306. 3150  LPRINT TAB(10);CHR$(42); :KT=1 :GOTO 3170
  307. 3160  LPRINT TAB(10);CHR$(124);
  308. 3170  FOR U=20 TO 70 STEP 10
  309. 3180  IF Q>U THEN 3210
  310. 3190  IF KT=1 THEN 3210
  311. 3200  LPRINT TAB(Q);CHR$(42); :KT=1
  312. 3210  IF U<>Q THEN LPRINT TAB(U);CHR$(43);
  313. 3220  NEXT U
  314. 3230  KT=0 :GOTO 1790
  315.